package com.ruoyi.classai.controller;

import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.ruoyi.classai.domain.EwcSchool;
import com.ruoyi.classai.service.IEwcSchoolService;
import com.ruoyi.common.core.constant.Constants;
import com.ruoyi.common.core.utils.StringUtils;
import com.ruoyi.common.core.web.controller.BaseController;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.core.web.page.TableDataInfo;
import com.ruoyi.common.log.annotation.Log;
import com.ruoyi.common.log.enums.BusinessType;
import com.ruoyi.common.security.annotation.InnerAuth;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import javax.validation.Valid;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Objects;

/**
 * 学校信息管理
 * 
 * @author lcj
 * @date 2025-05-08
 */
@Slf4j
@Validated
@RestController
@Tag(name = "学校信息管理接口", description = "学校信息管理接口")
@RequestMapping("/school")
public class EwcSchoolController extends BaseController
{
    @Autowired
    private IEwcSchoolService ewcSchoolService;

    /**
     * 查询所有学校列表
     * @return 学校列表
     */
    @Operation(summary = "查询所有学校列表")
    @GetMapping("/getSchoolList")
    public AjaxResult getSchoolList() {
        List<EwcSchool> list = ewcSchoolService.list(Wrappers.<EwcSchool>lambdaQuery()
                .eq(EwcSchool::getStatus, Constants.COMMON_SUCCESS)
                .select(EwcSchool::getId,EwcSchool::getName));
        return AjaxResult.success(list);
    }


    /**
     * 查询学校信息列表
     * @param name 学校名称
     * @param contact 联系人
     * @param contactMobile 联系人电话
     * @param status 状态
     * @param schoolType 学校类型
     * @return 学校列表
     */
    @Operation(summary = "查询学校信息列表")
    @RequiresPermissions("classai:school:list")
    @GetMapping("/list")
    public TableDataInfo list(String name,String contact,String contactMobile,Integer status,Integer schoolType) {
        startPage();
        List<EwcSchool> list = ewcSchoolService.list(Wrappers.<EwcSchool>lambdaQuery()
                .like(StringUtils.isNotEmpty(name),EwcSchool::getName,name)
                .like(StringUtils.isNotEmpty(contact),EwcSchool::getContact,contact)
                .like(StringUtils.isNotEmpty(contactMobile),EwcSchool::getContactMobile,contactMobile)
                .eq(Objects.nonNull(status),EwcSchool::getStatus,status)
                .eq(Objects.nonNull(schoolType),EwcSchool::getSchoolType,schoolType));
        return getDataTable(list);
    }


    /**
     * 获取学校信息详细信息
     * @param id 学校id
     * @return 学校信息
     */
    @Operation(summary = "获取学校信息详细信息")
    @RequiresPermissions("classai:school:query")
    @GetMapping(value = "/getInfo/{id}")
    public AjaxResult getInfo(@PathVariable("id") String id)
    {
        return AjaxResult.success(ewcSchoolService.getById(id));
    }

    /**
     * 新增学校信息
     * @param ewcSchool 学校信息
     * @return AjaxResult
     */
    @Operation(summary = "新增学校信息")
    @RequiresPermissions("classai:school:add")
    @Log(title = "学校信息", businessType = BusinessType.INSERT)
    @PostMapping("/add")
    public AjaxResult add(@Valid @RequestBody EwcSchool ewcSchool)
    {
        return toAjax(ewcSchoolService.save(ewcSchool));
    }

    /**
     * 修改学校信息
     * @param ewcSchool 学校信息
     * @return AjaxResult
     */
    @Operation(summary = "修改学校信息")
    @RequiresPermissions("classai:school:edit")
    @Log(title = "学校信息", businessType = BusinessType.UPDATE)
    @PostMapping("/edit")
    public AjaxResult edit(@Valid @RequestBody EwcSchool ewcSchool)
    {
        return toAjax(ewcSchoolService.updateById(ewcSchool));
    }

    /**
     * 删除学校信息
     * @param ids 学校id
     * @return AjaxResult
     */
    @Operation(summary = "删除学校信息")
    @RequiresPermissions("classai:school:remove")
    @Log(title = "学校信息", businessType = BusinessType.DELETE)
	@GetMapping("/remove/{ids}")
    public AjaxResult remove(@PathVariable String[] ids) {
        Arrays.asList(ids).forEach(d->{
            EwcSchool school=new EwcSchool();
            school.setId(d);
            school.setStatus(0);
            ewcSchoolService.updateById(school);
        });
        return AjaxResult.success();
    }

    /**
     * 学校类型统计
     * @return AjaxResult
     */
    @Operation(summary = "学校类型统计")
    @GetMapping("/countSchoolType")
    public AjaxResult countSchoolType() {
        return AjaxResult.success(ewcSchoolService.countSchoolType());
    }


    /**
     * 学校地区统计
     * @return AjaxResult
     */
    @Operation(summary = "学校地区统计")
    @GetMapping("/countSchoolCity")
    public AjaxResult countSchoolCity() {

        return AjaxResult.success(ewcSchoolService.countSchoolCity());
    }


    /**
     * 查询学校信息
     * @param schoolId 学校id
     * @return AjaxResult
     */
    @InnerAuth
    @Operation(summary = "查询学校信息")
    @GetMapping("/getSchoolInfo")
    public AjaxResult getSchoolInfo(String schoolId) {

        return AjaxResult.success(ewcSchoolService.getById(schoolId));
    }


}
